package com.kinyx.framework.utils;

import java.io.Serializable;

import javax.util.XArrayList;

import org.junit.Assert;
import org.junit.Test;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

public class KListUtils_Tester_deepCopy {

	@Getter
	@Setter
	@AllArgsConstructor
	@ToString
	@SuppressWarnings("serial")
	public static class Bean implements Serializable { private final String value; }

	@Test
	public void test() {
		Assert.assertNull(KListUtils.deepCopy(null));

		Assert.assertEquals("[]", KListUtils.toString(KListUtils.deepCopy(new XArrayList<String>())));

		Assert.assertEquals("[null]", KListUtils.toString(KListUtils.deepCopy(new XArrayList<String>().xAdd(null))));
		Assert.assertEquals("[foo]", KListUtils.toString(KListUtils.deepCopy(new XArrayList<String>().xAdd("foo"))));

		Assert.assertEquals("[null]", KListUtils.toString(KListUtils.deepCopy(new XArrayList<Bean>().xAdd(null))));
		Assert.assertEquals(String.format("[%s.Bean(value=foo)]", KListUtils_Tester_deepCopy.class.getSimpleName()), KListUtils.toString(KListUtils.deepCopy(new XArrayList<Bean>().xAdd(new Bean("foo")))));
		Assert.assertEquals(String.format("[null, %s.Bean(value=foo)]", KListUtils_Tester_deepCopy.class.getSimpleName()), KListUtils.toString(KListUtils.deepCopy(new XArrayList<Bean>().xAdd(null).xAdd(new Bean("foo")))));

		Assert.assertEquals("[[null]]", KListUtils.toString(KListUtils.deepCopy(new XArrayList<XArrayList<Bean>>().xAdd(new XArrayList<Bean>().xAdd(null)))));
		Assert.assertEquals(String.format("[[%s.Bean(value=foo)]]", KListUtils_Tester_deepCopy.class.getSimpleName()), KListUtils.toString(KListUtils.deepCopy(new XArrayList<XArrayList<Bean>>().xAdd(new XArrayList<Bean>().xAdd(new Bean("foo"))))));
		Assert.assertEquals(String.format("[[null, %s.Bean(value=foo)]]", KListUtils_Tester_deepCopy.class.getSimpleName()), KListUtils.toString(KListUtils.deepCopy(new XArrayList<XArrayList<Bean>>().xAdd(new XArrayList<Bean>().xAdd(null).xAdd(new Bean("foo"))))));

		Assert.assertEquals(String.format("[null, [null, %s.Bean(value=foo)]]", KListUtils_Tester_deepCopy.class.getSimpleName()), KListUtils.toString(KListUtils.deepCopy(new XArrayList<XArrayList<Bean>>().xAdd(null).xAdd(new XArrayList<Bean>().xAdd(null).xAdd(new Bean("foo"))))));
	}

}
